home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
041-050
/
amok44
/
m2ced
/
txt
/
errormsg.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
3KB
|
168 lines
(**********************************************************************
:Program. ErrorMsg.mod
:Contents. Read all errormessages from M2:Fehlermeldungen
:Author. Steffen Reith
:Address. Hessenstr. 64, D-8700 Würzburg
:Copyright. Shareware
:Language. Modula-2
:Translator. M2Amiga A+L V3.2d
:Imports. Msg
:History. V1.0 14.June 1990
:History. V1.1 24.June 1990 ( Better Memory Usage )
**********************************************************************)
IMPLEMENTATION MODULE ErrorMsg;
FROM Dos IMPORT Open,Close,FileHandlePtr,readOnly,Seek,Read,beginning,
current;
FROM SYSTEM IMPORT ADR,ADDRESS,BYTE;
FROM Heap IMPORT Allocate,Deallocate;
FROM Msg IMPORT EndRequest;
CONST ErrName='M2:Fehler-Meldungen'; (* Nur deutsche Version *)
TYPE NodePtr=POINTER TO Node;
Node=RECORD
No:INTEGER;
Entry:ADDRESS;
NextNode:NodePtr
END;
VAR CurrentPtr:NodePtr;
PROCEDURE KillList(Root:NodePtr);
VAR Help:NodePtr;
BEGIN
WHILE Root#NIL DO
Help:=Root;
Root:=Root^.NextNode;
Deallocate(Help^.Entry);
Deallocate(ADDRESS(Help))
END
END KillList;
PROCEDURE ReadLongInt(File:FileHandlePtr):LONGINT;
VAR Value,Dummy:LONGINT;
BEGIN
Dummy:=Read(File,ADR(Value),SIZE(Value));
RETURN(Value)
END ReadLongInt;
PROCEDURE ReadErrorNumber(File:FileHandlePtr):INTEGER;
VAR Dummy:LONGINT;
Value:INTEGER;
BEGIN
Dummy:=Read(File,ADR(Value),SIZE(Value));
RETURN(Value)
END ReadErrorNumber;
PROCEDURE ReadString(File:FileHandlePtr;Next:LONGINT;VAR Text:ADDRESS);
VAR Dummy,Aktuell,Laenge:LONGINT;
BEGIN
Aktuell:=Seek(File,0,current);
Laenge:=Next-Aktuell;
Allocate(Text,Laenge);
IF Text=NIL THEN
EndRequest('Nicht genug Speicher fuer Fehlermeldungen')
END;
Dummy:=Read(File,Text,Laenge)
END ReadString;
PROCEDURE ReadList(VAR Root:NodePtr);
VAR File:FileHandlePtr;
Help:NodePtr;
Ptr:ADDRESS;
Next,Dummy:LONGINT;
Meldung:String;
ErrorNo:INTEGER;
BEGIN
File:=NIL;
Root:=NIL;
File:=Open(ADR(ErrName),readOnly);
IF File=NIL THEN
EndRequest('Kann Fehlermeldungsdatei nicht oeffnen')
END;
LOOP
Next:=ReadLongInt(File);
IF Next=0 THEN EXIT END;
ErrorNo:=ReadErrorNumber(File);
ReadString(File,Next,Ptr);
Allocate(ADDRESS(Help),SIZE(Node));
IF Help=NIL THEN
EndRequest('Nicht genug Speicher fuer Errorliste')
END;
WITH Help^ DO
No:=ErrorNo;
Entry:=Ptr;
NextNode:=Root
END;
Root:=Help;
Dummy:=Seek(File,Next,beginning)
END;
CurrentPtr:=Root; (* Global !! *)
Close(File)
END ReadList;
PROCEDURE NextEntry():NodePtr;
BEGIN
IF CurrentPtr^.NextNode#NIL THEN
CurrentPtr:=CurrentPtr^.NextNode;
RETURN CurrentPtr
ELSE
RETURN NIL
END
END NextEntry;
PROCEDURE Cp(Ptr:ADDRESS;VAR Text:String);
TYPE CharPtr=POINTER TO CHAR;
VAR ChPtr:CharPtr;
i:INTEGER;
BEGIN
i:=0;
ChPtr:=Ptr;
WHILE (ChPtr^#CHAR(0)) AND (i<=len) DO
Text[i]:=ChPtr^;
INC(i);
INC(ChPtr,SIZE(ChPtr^))
END;
IF i>len THEN
Text[i-1]:=CHAR(0)
ELSE
Text[i]:=CHAR(0)
END
END Cp;
PROCEDURE FindMsg (Root:NodePtr;Nummer:CARDINAL;VAR Msg:String);
VAR Help:NodePtr;
BEGIN
CurrentPtr:=Root;
REPEAT
Help:=NextEntry();
IF Help^.No=INTEGER(Nummer) THEN
Cp(Help^.Entry,Msg);
RETURN
END
UNTIL Help=NIL;
Msg:=''
END FindMsg;
BEGIN
END ErrorMsg.